package com.southgis.ibase.sql.func;

import com.southgis.ibase.sql.enums.ColumnTypeEnum;

import lombok.Data;

/**
 * 字段定义信息
 * @author dennis
 *
 */
@Data
public class ColumnDefine
{
	/** 字段名字 */
	String name;
	/** 注释 */
	String comment;
	/** 类型 */
	ColumnTypeEnum type;
	/** 定义字段的子类型修饰后缀（一般是在解释数据库返回的字段信息时使用，如：postgresql的时间戳类型有“with time zone”后缀）。<br>
	 * 另，对于空间要素类型(Geometry)，定义子类型：<br>
	 * point（点）,line（两点直线段）,polyline（折线）,<br>
	 * polygon（多边形），mpolygon（空心多边形，第一部分为外边界，剩下每一块描述的是内部空心边界）,<br>
	 * rectangle（矩形）,circle（圆）
	 */
	String suftype;
	/** 定义长度，两个特殊值：-1无长度限制（大文本块/二进制块），0使用默认长度 */
	int length=0;
	/** 保留小数位，仅Decimal类型需要 */
	int scale=0;
	/** 是否可为空（默认可为空） */
	boolean nullable=true;
	/** 是否主键 */
	boolean primaryKey=false;

	/**
	 * 从另一个定义对象中复制属性
	 * @param other
	 */
	public void copyFrom(ColumnDefine other)
	{
		this.name = other.name;
		this.comment = other.comment;
		this.type = other.type;
		this.suftype = other.suftype;
		this.length = other.length;
		this.scale = other.scale;
		this.nullable = other.nullable;
		this.primaryKey = other.primaryKey;
	}

	/**
	 * 全属性构造函数
	 * @param name 字段名
	 * @param comment 字段描述
	 * @param type 字段类型
	 * @param suftype 字段子类型（暂未使用）
	 * @param length 字段定义长度
	 * @param scale 定点小数类型时，小数位
	 * @param nullable 是否允许为空
	 * @param primaryKey 是否主键
	 */
	public ColumnDefine(String name, String comment, ColumnTypeEnum type, String suftype,
			int length, int scale, boolean nullable, boolean primaryKey)
	{
		this.name = name;
		this.comment = comment;
		this.type = type;
		this.suftype = suftype;
		this.length = length;
		this.scale = scale;
		this.nullable = nullable;
		this.primaryKey = primaryKey;
	}

	public ColumnDefine() {
	}
}
